A technology is known in which a computer program written for a sequential computing device is parallelized in such a way that it can be processed in parallel by a plurality of cores or processors. While performing parallelization of such a computer program, it is common to parallelize the loops accounting for the majority of the computation time in the computer program. While parallelizing a program containing loops; if it is not clear whether there is dependency between iterations of a loop, a technology is already known that enables performing parallelization when the developer determines that there exists no dependency between the iterations of the loop.
However, in the conventional technology, parallelization of a computer program having data dependency between iterations of a loop is a difficult task. On the other hand, it can also be an option to perform parallelization while ignoring the dependency between iterations. However, in that case, the developer has to insert synchronizations manually by taking into account the dependency relations of all of the data. That puts a lot of burden on the developer. Besides, the method in which the developer determines whether or not to perform parallelization is not practical unless the instructions for parallelization issued by the developer are confined to a loop-by-loop basis. In that regard, there has been a demand for a method or an apparatus that would generate a sophisticated parallel program at a low cost.